package cn.tedu.csmall.product.service.impl;

import cn.tedu.csmall.product.ex.ServiceException;
import cn.tedu.csmall.product.mapper.CategoryAttributeTemplateMapper;
import cn.tedu.csmall.product.pojo.dto.CategoryAttributeTemplateAddNewDTO;
import cn.tedu.csmall.product.pojo.entity.CategoryAttributeTemplate;
import cn.tedu.csmall.product.pojo.vo.CategoryAttributeTemplateStandardVO;
import cn.tedu.csmall.product.service.ICategoryAttributeTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
/**
 * 处理类别与属性模板的关联业务的实现类
 *
 * @author stephen
 * @version 0.0.1
 */
@Slf4j
@Service
public class CategoryAttributeTemplateServiceImpl implements ICategoryAttributeTemplateService {

    @Autowired
    private CategoryAttributeTemplateMapper categoryAttributeTemplateMapper;

    /**
     * 添加类别与属性模板关联的数据
     * @param categoryAttributeTemplateAddNewDTO 封装模板与属性的数据
     */
    @Override
    public void addNew(CategoryAttributeTemplateAddNewDTO categoryAttributeTemplateAddNewDTO) {
        log.debug("开始处理【类别与属性模板的关联】的业务，参数：{}",categoryAttributeTemplateAddNewDTO);
        //获取当前时间
        LocalDateTime now = LocalDateTime.now();
        //创建对象
        CategoryAttributeTemplate categoryAttributeTemplate = new CategoryAttributeTemplate();
        //赋值属性
        BeanUtils.copyProperties(categoryAttributeTemplateAddNewDTO,categoryAttributeTemplate);
        //补全其他的属性gmtCreate/gmtModified
        categoryAttributeTemplate.setGmtCreate(now);
        categoryAttributeTemplate.setGmtModified(now);
        //自动装配Mapper
        //执行添加操作
        int rows = categoryAttributeTemplateMapper.insert(categoryAttributeTemplate);
        //判断插入数据的受影响行数
        if(rows != 1){
            String message = "添加类别与属性模板的关联失败！服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ERR_INTERNAL_SERVER_ERROR,message);
        }
    }


    /**
     * 根据id删除类别与属性模板的关联数据的实现类的实现方法
     * @param id
     */
    @Override
    public void deleteById(Long id) {
        log.debug("开始处理【删除类别与属性模板关联】的业务,参数id：{}",id);
        //根据id查询，检查是否存在该对象
        Object standardById = categoryAttributeTemplateMapper.getStandardById(id);
        if(standardById == null){
            throw  new ServiceException(ERR_NOT_FOUND,"删除类别与属性模板的关联失败，尝试访问的数据不存在！");
        }
        // 执行删除
        log.debug("即使删除id为{}的类别与属性模板的关联……", id);
        int rows = categoryAttributeTemplateMapper.deleteById(id);
        if(rows != 1){
            throw  new ServiceException(ERR_INTERNAL_SERVER_ERROR,"删除类别与属性模板的关联失败，服务器忙，请稍后再次尝试！");
        }
        log.debug("删除完成！");
    }
}
